昨天用完搜尋時區的功能和兩個畫面的切換,今天要來嘗試在兩個畫面傳值。
在搜尋畫面找到想要的時區之後,卻沒辦法將時區傳回上一個畫面顯示出來,這裡就學到新的東西,跳頁傳值。
傳值的方法有很多,這裡我用的是寫一個protocol來反向傳值。
首先要再傳出值的畫面先建立一個新的protocol,記得要寫在class外面,簡單的樣子就大概像下面這樣。
protocol AddTimeZoneDelegate{
func AddTimeZone(AddedTimeZones: String)
}
然後在class裡新增protocol的delegate屬性。
var ShowTimeZoneDelegate: AddTimeZoneDelegate?
最後在你要返回上一頁前呼叫,並且賦值給傳值的參數,這裡是在點選要的時區的時候返回。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
ShowTimeZoneDelegate?.AddTimeZone(AddedTimeZones: TimeZones[indexPath.row])
self.navigationController?.popViewController(animated: true)
}
傳值的畫面有了,接下來換接收值的畫面,首先要做的就是讓畫面也遵從新的protocol,在class後新增要遵從的protocol名稱,這樣就能自由的使用protocol裡的功能。
但是能使用功能還不夠,因為protocol還沒指定delegate,不知道是由誰來工作。
要在前往下一頁的地方,指定delegate,這樣就能正常地傳值了。
let SearchPageVC = SearchPageViewController()
SearchPageVC.ShowTimeZoneDelegate = self
self.navigationController?.pushViewController(SearchPageVC, animated: true)
今天的內容就到這裡,明天要開始製作鬧鐘,製作前也有一些新的東西要了解。